/*
 *  $Id: PackAura.cs 1024 2010-05-13 15:10:45Z thenn.erannor $
 *	This file is a part of Ragima CCG.
 *	(C) 2008 Ragima development group.
 *
 *	Licensed under the terms of the GNU GPL License version 2.
 *
 */

namespace Ragima {
    /// <summary>
    /// Абстрактная аура, включающаяся по определенному условию и действующая только на существ определенной расы.
    /// Параметр: раса существ, на которую действует аура.
    /// </summary>
    public abstract class PackAuraAffect: CreatureAuraAffect {
        private Race _race;
        private bool _enabled;

        public PackAuraAffect(Race race): base(true, true) {
            _race = race;
            _enabled = false;
        }

        public override int AverageWeightPercent {
            get { return 150; }
        }

        public override void SetAffect() {
            _enabled = IsEnabledAura();
            base.SetAffect();
            GlobalSummary.OnUpdateAura += DoUpdate;
            EnemySummary.OnUpdateAura += DoUpdate;
        }
        public override void ResetAffect() {
            base.ResetAffect();
            GlobalSummary.OnUpdateAura -= DoUpdate;
            EnemySummary.OnUpdateAura -= DoUpdate;
        }

        private void DoUpdate() {
            bool enabled = IsEnabledAura();
            if (enabled == _enabled) return;
            _enabled = enabled;
            UpdateAura(true);
        }

        protected override bool AcceptCreature(Creature cr) {
            if (!_enabled || cr == Owner) return false;
            return cr.Race.IsRace(_race);
        }

        protected virtual bool IsEnabledAura() {
            return true;
        }
    }
}